﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OffInvoiceExcelAddIn
{

    /// <summary>
    /// Clase que se serializa para tratar como objetos los datos de un archivo xml que define
    /// la estructura de datos necesario para acceder a un Servidor de sellado de tiempo
    /// </summary>
    public class TimeStampConfig
    {
        #region "Fields"
        
        /// <summary>
        /// Lista de servidores de sellado de tiempo
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(ElementName = "TimeStamp")]
        public List<TimeStamp> TimeStamp { get; set; }

        #endregion

        #region "Constructors"

        /// <summary>
        /// Constructor
        /// </summary>
        public TimeStampConfig()
        {
            TimeStamp = new List<TimeStamp>();
        }

        #endregion
    }


    /// <summary>
    /// Clase que define la estructura de los datos de conexión con un servidor de sellado de tiempo
    /// </summary>
    [System.SerializableAttribute()]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public class TimeStamp
    {
        #region ""Fields

        /// <summary>
        /// Campo con el nombre o "alias" del servidor
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// Campo con la URL de conexión del servidor de sellado de tiempo
        /// </summary>
        public string Url { get; set; }

        /// <summary>
        /// Campo con el nombre de usuario para acceder a un servidor de sellado de tiempo que requiere autenticación
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// Campo con la contraseña de acceso a un servidor de sellado de tiempo que requiere autenticación
        /// </summary>
        public string Password { get; set; }

        #endregion

        #region "Constructors"


        /// <summary>
        /// Contructor
        /// </summary>
        public TimeStamp()
        {
            Name = string.Empty;
            Url = string.Empty;
            UserName = string.Empty;
            Password = string.Empty;
        }

        #endregion

        #region "Public Methods"

        /// <summary>
        /// Método que sobreescribe el método Equals el cual compara 2 objetos de la misma clase
        /// </summary>
        /// <param name="obj">Objeto de tipo TimeStamp</param>
        /// <returns>True o False dependiendo de si son iguales los objetos o no</returns>
        public override bool Equals(object obj)
        {
            TimeStamp objTS = (TimeStamp)obj;
            if (
                this.Name.Equals(objTS.Name) &&
                this.Password.Equals(objTS.Password) &&
                this.Url.Equals(objTS.Url) &&
                this.UserName.Equals(objTS.UserName)
            )
            {
                return true;
            }
            return false;
        }

        #endregion
    }
}
